home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-09-17 | 5.5 KB | 191 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: FWODExce.cpp
- // Release Version: $ ODF 2 $
- //
- // Copyright: (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #include "FWFound.hpp"
-
- #ifndef _ERRORDEF_
- #include "ErrorDef.xh"
- #endif
-
- #ifndef FWODEXCE_H
- #include "FWODExce.h"
- #endif
-
- #ifndef FWPRIDEB_H
- #include "FWPriDeb.h"
- #endif
-
- #ifndef SOM_Module_OpenDoc_Global_TypesB_defined
- #include "ODTypesB.xh"
- #endif
-
- #include <new.h>
-
- //========================================================================================
- // Runtime Informations
- //========================================================================================
-
- #ifdef FW_BUILD_MAC
- #pragma segment slexcept
- #endif
-
- //========================================================================================
- // Global functions
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_FailOnError
- //----------------------------------------------------------------------------------------
-
- void FW_FailOnError(FW_PlatformError error)
- {
- if (error != 0)
- FW_THROW(FW_XException(error));
- }
-
- //----------------------------------------------------------------------------------------
- // FW_Failure
- //----------------------------------------------------------------------------------------
-
- void FW_Failure(FW_PlatformError error)
- {
- FW_ASSERT(error != 0);
- FW_THROW(FW_XException(error));
- }
-
- //----------------------------------------------------------------------------------------
- // FW_FailODError
- //----------------------------------------------------------------------------------------
-
- void FW_FailOnEvError(Environment* ev)
- {
- FW_PlatformError theError = FW_GetEvError(ev);
- if (theError != FW_xNoError)
- {
- FW_SetEvError(ev, FW_xNoError);
- FW_THROW(FW_XException(theError));
- }
- }
-
- //----------------------------------------------------------------------------------------
- // FW_SetException
- //----------------------------------------------------------------------------------------
-
- void FW_SetException(Environment *ev, const FW_XException& exception)
- {
- FW_SetEvError(ev, exception.GetPlatformError());
- }
-
- //----------------------------------------------------------------------------------------
- // FW_SetEvError
- //----------------------------------------------------------------------------------------
-
- void FW_SetEvError(Environment* ev, FW_PlatformError error)
- {
- if (error)
- {
- ODException *x = (ODException*) SOMMalloc(sizeof(ODException));
- x->error = error;
- x->message[0] = '\0';
- somSetException(ev, USER_EXCEPTION, ex_ODException, x);
- }
- else if (ev->_major != NO_EXCEPTION)
- {
- somExceptionFree(ev);
- ev->_major = NO_EXCEPTION;
- }
- }
-
- //----------------------------------------------------------------------------------------
- // FW_GetEvError
- //----------------------------------------------------------------------------------------
-
- FW_PlatformError FW_GetEvError(Environment* ev)
- {
- if (ev->_major)
- {
- const char *excpName = somExceptionId(ev);
- if (FW_PrimitiveStringEqual(excpName, ex_ODException) == 1)
- {
- ODException *x = (ODException*) somExceptionValue(ev);
- return x->error;
- }
- else
- {
- // Don't know what to do, its a non-OpenDoc error
- FW_DEBUG_MESSAGE("Environment has non-OpenDoc error");
- return FW_xUnknownError;
- }
- }
- else
- return FW_xNoError;
- }
-
- //========================================================================================
- // CLASS FW_XException
- //========================================================================================
-
- FW_DEFINE_CLASS_M0(FW_XException)
- FW_DEFINE_EXCEPTION(FW_XException)
-
- //----------------------------------------------------------------------------------------
- // FW_XException::FW_XException
- //----------------------------------------------------------------------------------------
-
- FW_XException::FW_XException(const FW_XException& exception) :
- fPlatformError(exception.fPlatformError)
- {
- FW_ASSERT(fPlatformError != 0);
- }
-
- //----------------------------------------------------------------------------------------
- // FW_XException::FW_XException
- //----------------------------------------------------------------------------------------
-
- FW_XException::FW_XException(FW_PlatformError theError) :
- fPlatformError(theError == 0 ? FW_xUnknownError : theError)
- {
- FW_ASSERT(fPlatformError != 0);
- }
-
- //----------------------------------------------------------------------------------------
- // FW_XException::GetPlatformError
- //----------------------------------------------------------------------------------------
-
- FW_PlatformError FW_XException::GetPlatformError(void) const
- {
- return fPlatformError;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_XException::~FW_XException
- //----------------------------------------------------------------------------------------
-
- FW_XException::~FW_XException()
- {
- }
-
- //========================================================================================
- // CLASS FW_CPrivInstallNewHandler
- //========================================================================================
-
- static void FW_PrivNewHandler(void)
- {
- FW_FailOnError(kODErrOutOfMemory);
- }
-
- class FW_CPrivInstallNewHandler
- {
- public:
- FW_CPrivInstallNewHandler() { ::set_new_handler(FW_PrivNewHandler); }
- ~FW_CPrivInstallNewHandler() {}
- };
-
- FW_CPrivInstallNewHandler gInstallNewHandler;
-